﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.IO;
using System.Drawing;
using System.Globalization;
using System.ComponentModel;
using System.Data;
using System.Windows.Forms;


namespace ProyectoPractico
{
    class FuzzyArtmap
    {
        private const int CANTEJ = 1;//Variable 
        //ATRIBUTOS*****************************************************************************************
        private Art A;
        private Art B;
        private CargadorImagen cargadorImagenes;
        private int cantidadEntradas;
        private double[] vectorEntradas;


        //METODOS*****************************************************************************************

        /*
        * Constructor de la clase
        */
        public FuzzyArtmap(int nEntrada, string nombreArchImagenes/*, int nSalida, double[,] entrada*/)
        {
            cargadorImagenes = new CargadorImagen(nombreArchImagenes);
            vectorEntradas = new double[nEntrada];
            cantidadEntradas = nEntrada;
            A = new Art(nEntrada/*,nSalida,entrada*/);
        }

        //-------------------------------------------------------------------------------------------------


        /*
         * 
         */
        public void cargarEntradas(string nombreArch)
        {
            int contador = 0;
            for (int x = 0; x < (cantidadEntradas / cantidadEntradas); x++)
            {
                for (int y = 0; y < (cantidadEntradas / cantidadEntradas); y++)
                {
                    vectorEntradas[contador] = cargadorImagenes.getPixelFoto(x, y);
                    contador++;
                }
            }
        }



        //-------------------------------------------------------------------------------------------------

        /*
         * 
         */
        public void guardarPesos(int arch)
        {
            switch (arch)
            {
                case 1://pesos ART A ida
                    A.guardarPesosIda(preguntarNombreArchivo("Ingrese el nombre del archivo con los pesos de ida del Art A"));
                    break;
                case 2://pesos ART A vuelta
                    A.guardarPesosVuelta(preguntarNombreArchivo("Ingrese el nombre del archivo con los pesos de vuelta del Art A"));
                    break;
                case 3://pesos ART B ida
                    B.guardarPesosIda(preguntarNombreArchivo("Ingrese el nombre del archivo con los pesos de ida del Art B"));
                    break;
                case 4://pesos ART B vuelta
                    B.guardarPesosVuelta(preguntarNombreArchivo("Ingrese el nombre del archivo con los pesos de vuelta del Art B"));
                    break;

            }
        }
        //-------------------------------------------------------------------------------------------------

        /*
         * 
         */
        public void cargarPesos(int arch)
        {
            switch (arch)
            {
                case 1://pesos ART A ida
                    A.cargarPesosIda(preguntarNombreArchivo("Ingrese el nombre del archivo donde guardar\n los pesos de ida del Art A"));
                    break;
                case 2://pesos ART A vuelta
                    A.cargarPesosVuelta(preguntarNombreArchivo("Ingrese el nombre del archivo donde guardar\n los pesos de vuelta del Art A"));
                    break;
                case 3://pesos ART B ida
                    B.cargarPesosIda(preguntarNombreArchivo("Ingrese el nombre del archivo donde guardar\n los pesos de ida del Art B"));
                    break;
                case 4://pesos ART B vuelta
                    B.cargarPesosVuelta(preguntarNombreArchivo("Ingrese el nombre del archivo donde guardar\n los pesos de vuelta del Art B"));
                    break;

            }
        }

        /*

         * Método base del aprendizaje de la ART
         */
        public int aprender()
        {

            cargadorImagenes.cargarSiguiente();
            return 1;
        }
        //-------------------------------------------------------------------------------------------------

        /*
         * Método que guarda los pesos de ida en un archivo
         */
        private string preguntarNombreArchivo(string pregunta)
        {
            bool seguir = false;
            string respuesta = " ";
            do
            {
                try
                {
                    MessageBox.Show(pregunta, "Pesos", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    OpenFileDialog openFileDialog = new OpenFileDialog();
                    openFileDialog.Filter = "text files (*.txt)|*.txt";
                    respuesta = openFileDialog.FileName;
                }
                catch (Exception e)
                {
                    MessageBox.Show("Se produjo un error con el archivo, intente nuevamente!", "Pesos", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    seguir = true;
                }

            } while (seguir);
            return respuesta;
        }
        //-------------------------------------------------------------------------------------------------

        /*
         * 
         */
    }
}
